﻿
Semaphore semaphore = new Semaphore(2, 4);   // 初始2，最大4个线程

for(int i=1;i<=10;i++)
{
    Thread t = new Thread(Worker);
    t.Start(i);
}

void Worker(object? obj)
{
    Console.WriteLine($"线程:{obj} 等待进入");

    //等待信号
    semaphore.WaitOne();

    Console.WriteLine($"线程 {obj} 拿到信号,已进入");
    //睡眠1秒
    Thread.Sleep(1000);
    Console.WriteLine($"线程 {obj} 正在退出,准备释放信号");

    //释放信号
    semaphore.Release();
}